<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.CmmToAsm.Reg.Linear.Stats</span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-2"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Stats.html#binSpillReasons"><span class="hs-identifier">binSpillReasons</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-3"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Stats.html#countRegRegMovesNat"><span class="hs-identifier">countRegRegMovesNat</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-4"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Stats.html#pprStats"><span class="hs-identifier">pprStats</span></a></span><span>
</span><span id="line-5"></span><span class="hs-special">)</span><span>
</span><span id="line-6"></span><span>
</span><span id="line-7"></span><span class="hs-keyword">where</span><span>
</span><span id="line-8"></span><span>
</span><span id="line-9"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span>
</span><span id="line-10"></span><span>
</span><span id="line-11"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Base.html"><span class="hs-identifier">GHC.CmmToAsm.Reg.Linear.Base</span></a></span><span>
</span><span id="line-12"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Liveness.html"><span class="hs-identifier">GHC.CmmToAsm.Reg.Liveness</span></a></span><span>
</span><span id="line-13"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html"><span class="hs-identifier">GHC.CmmToAsm.Instr</span></a></span><span>
</span><span id="line-14"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html"><span class="hs-identifier">GHC.Types.Unique</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Unique.html#Unique"><span class="hs-identifier">Unique</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-15"></span><span>
</span><span id="line-16"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.FM.html"><span class="hs-identifier">GHC.Types.Unique.FM</span></a></span><span>
</span><span id="line-17"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html"><span class="hs-identifier">GHC.Utils.Outputable</span></a></span><span>
</span><span id="line-18"></span><span>
</span><span id="line-19"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Monad.State.html"><span class="hs-identifier">GHC.Utils.Monad.State</span></a></span><span>
</span><span id="line-20"></span><span>
</span><span id="line-21"></span><span class="hs-comment">-- | Build a map of how many times each reg was alloced, clobbered, loaded etc.</span><span>
</span><span id="line-22"></span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Stats.html#binSpillReasons"><span class="hs-identifier hs-type">binSpillReasons</span></a></span><span>
</span><span id="line-23"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Base.html#SpillReason"><span class="hs-identifier hs-type">SpillReason</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Unique.FM.html#UniqFM"><span class="hs-identifier hs-type">UniqFM</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Unique"><span class="hs-identifier hs-type">Unique</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">]</span><span>
</span><span id="line-24"></span><span>        </span><span class="hs-comment">-- See Note [UniqFM and the register allocator]</span><span>
</span><span id="line-25"></span><span id="binSpillReasons"><span class="annot"><span class="annottext">binSpillReasons :: [SpillReason] -&gt; UniqFM Unique [Int]
</span><a href="GHC.CmmToAsm.Reg.Linear.Stats.html#binSpillReasons"><span class="hs-identifier hs-var hs-var">binSpillReasons</span></a></span></span><span> </span><span id="local-6989586621681023323"><span class="annot"><span class="annottext">[SpillReason]
</span><a href="#local-6989586621681023323"><span class="hs-identifier hs-var">reasons</span></a></span></span><span>
</span><span id="line-26"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">([Int] -&gt; [Int] -&gt; [Int])
-&gt; UniqFM Unique [Int] -&gt; [(Unique, [Int])] -&gt; UniqFM Unique [Int]
forall key elt.
Uniquable key =&gt;
(elt -&gt; elt -&gt; elt)
-&gt; UniqFM key elt -&gt; [(key, elt)] -&gt; UniqFM key elt
</span><a href="GHC.Types.Unique.FM.html#addListToUFM_C"><span class="hs-identifier hs-var">addListToUFM_C</span></a></span><span>
</span><span id="line-27"></span><span>                </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Int -&gt; Int -&gt; Int) -&gt; [Int] -&gt; [Int] -&gt; [Int]
forall a b c. (a -&gt; b -&gt; c) -&gt; [a] -&gt; [b] -&gt; [c]
</span><a href="../../base/src/GHC.List.html#zipWith"><span class="hs-identifier hs-var">zipWith</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">(+)</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-28"></span><span>                </span><span class="annot"><span class="annottext">UniqFM Unique [Int]
forall key elt. UniqFM key elt
</span><a href="GHC.Types.Unique.FM.html#emptyUFM"><span class="hs-identifier hs-var">emptyUFM</span></a></span><span>
</span><span id="line-29"></span><span>                </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(SpillReason -&gt; (Unique, [Int]))
-&gt; [SpillReason] -&gt; [(Unique, [Int])]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621681023318"><span class="annot"><span class="annottext">SpillReason
</span><a href="#local-6989586621681023318"><span class="hs-identifier hs-var">reason</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">SpillReason
</span><a href="#local-6989586621681023318"><span class="hs-identifier hs-var">reason</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-30"></span><span>                        </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Base.html#SpillAlloc"><span class="hs-identifier hs-type">SpillAlloc</span></a></span><span> </span><span id="local-6989586621681023316"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681023316"><span class="hs-identifier hs-var">r</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681023316"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-31"></span><span>                        </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Base.html#SpillClobber"><span class="hs-identifier hs-type">SpillClobber</span></a></span><span> </span><span id="local-6989586621681023314"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681023314"><span class="hs-identifier hs-var">r</span></a></span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681023314"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-32"></span><span>                        </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Base.html#SpillLoad"><span class="hs-identifier hs-type">SpillLoad</span></a></span><span> </span><span id="local-6989586621681023312"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681023312"><span class="hs-identifier hs-var">r</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681023312"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-33"></span><span>                        </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Base.html#SpillJoinRR"><span class="hs-identifier hs-type">SpillJoinRR</span></a></span><span> </span><span id="local-6989586621681023310"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681023310"><span class="hs-identifier hs-var">r</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681023310"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-34"></span><span>                        </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Base.html#SpillJoinRM"><span class="hs-identifier hs-type">SpillJoinRM</span></a></span><span> </span><span id="local-6989586621681023308"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681023308"><span class="hs-identifier hs-var">r</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681023308"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">]</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[SpillReason]
</span><a href="#local-6989586621681023323"><span class="hs-identifier hs-var">reasons</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-35"></span><span>
</span><span id="line-36"></span><span>
</span><span id="line-37"></span><span class="hs-comment">-- | Count reg-reg moves remaining in this code.</span><span>
</span><span id="line-38"></span><span id="local-6989586621681023412"><span id="local-6989586621681023414"><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Stats.html#countRegRegMovesNat"><span class="hs-identifier hs-type">countRegRegMovesNat</span></a></span><span>
</span><span id="line-39"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#Instruction"><span class="hs-identifier hs-type">Instruction</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681023414"><span class="hs-identifier hs-type">instr</span></a></span><span>
</span><span id="line-40"></span><span>        </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#NatCmmDecl"><span class="hs-identifier hs-type">NatCmmDecl</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681023412"><span class="hs-identifier hs-type">statics</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681023414"><span class="hs-identifier hs-type">instr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span></span></span><span>
</span><span id="line-41"></span><span>
</span><span id="line-42"></span><span id="countRegRegMovesNat"><span class="annot"><span class="annottext">countRegRegMovesNat :: forall instr statics.
Instruction instr =&gt;
NatCmmDecl statics instr -&gt; Int
</span><a href="GHC.CmmToAsm.Reg.Linear.Stats.html#countRegRegMovesNat"><span class="hs-identifier hs-var hs-var">countRegRegMovesNat</span></a></span></span><span> </span><span id="local-6989586621681023301"><span class="annot"><span class="annottext">NatCmmDecl statics instr
</span><a href="#local-6989586621681023301"><span class="hs-identifier hs-var">cmm</span></a></span></span><span>
</span><span id="line-43"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">State Int (NatCmmDecl statics instr) -&gt; Int -&gt; Int
forall s a. State s a -&gt; s -&gt; s
</span><a href="GHC.Utils.Monad.State.html#execState"><span class="hs-identifier hs-var">execState</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(GenBasicBlock instr -&gt; State Int (GenBasicBlock instr))
-&gt; NatCmmDecl statics instr -&gt; State Int (NatCmmDecl statics instr)
forall (m :: * -&gt; *) i d h.
Monad m =&gt;
(GenBasicBlock i -&gt; m (GenBasicBlock i))
-&gt; GenCmmDecl d h (ListGraph i) -&gt; m (GenCmmDecl d h (ListGraph i))
</span><a href="GHC.CmmToAsm.Reg.Liveness.html#mapGenBlockTopM"><span class="hs-identifier hs-var">mapGenBlockTopM</span></a></span><span> </span><span class="annot"><span class="annottext">GenBasicBlock instr -&gt; State Int (GenBasicBlock instr)
forall {b} {s}.
(Instruction b, Num s) =&gt;
GenBasicBlock b -&gt; State s (GenBasicBlock b)
</span><a href="#local-6989586621681023298"><span class="hs-identifier hs-var">countBlock</span></a></span><span> </span><span class="annot"><span class="annottext">NatCmmDecl statics instr
</span><a href="#local-6989586621681023301"><span class="hs-identifier hs-var">cmm</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span>
</span><span id="line-44"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-45"></span><span>        </span><span id="local-6989586621681023298"><span class="annot"><span class="annottext">countBlock :: GenBasicBlock b -&gt; State s (GenBasicBlock b)
</span><a href="#local-6989586621681023298"><span class="hs-identifier hs-var hs-var">countBlock</span></a></span></span><span> </span><span id="local-6989586621681023288"><span class="annot"><span class="annottext">b :: GenBasicBlock b
</span><a href="#local-6989586621681023288"><span class="hs-identifier hs-var">b</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.html#BasicBlock"><span class="hs-identifier hs-type">BasicBlock</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681023286"><span class="annot"><span class="annottext">[b]
</span><a href="#local-6989586621681023286"><span class="hs-identifier hs-var">instrs</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-46"></span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>   </span><span class="annot"><span class="annottext">(b -&gt; State s b) -&gt; [b] -&gt; State s ()
forall (t :: * -&gt; *) (m :: * -&gt; *) a b.
(Foldable t, Monad m) =&gt;
(a -&gt; m b) -&gt; t a -&gt; m ()
</span><a href="../../base/src/Data.Foldable.html#mapM_"><span class="hs-identifier hs-var">mapM_</span></a></span><span> </span><span class="annot"><span class="annottext">b -&gt; State s b
forall {a} {s}. (Instruction a, Num s) =&gt; a -&gt; State s a
</span><a href="#local-6989586621681023284"><span class="hs-identifier hs-var">countInstr</span></a></span><span> </span><span class="annot"><span class="annottext">[b]
</span><a href="#local-6989586621681023286"><span class="hs-identifier hs-var">instrs</span></a></span><span>
</span><span id="line-47"></span><span>                </span><span class="annot"><span class="annottext">GenBasicBlock b -&gt; State s (GenBasicBlock b)
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>  </span><span class="annot"><span class="annottext">GenBasicBlock b
</span><a href="#local-6989586621681023288"><span class="hs-identifier hs-var">b</span></a></span><span>
</span><span id="line-48"></span><span>
</span><span id="line-49"></span><span>        </span><span id="local-6989586621681023284"><span class="annot"><span class="annottext">countInstr :: a -&gt; State s a
</span><a href="#local-6989586621681023284"><span class="hs-identifier hs-var hs-var">countInstr</span></a></span></span><span> </span><span id="local-6989586621681023275"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681023275"><span class="hs-identifier hs-var">instr</span></a></span></span><span>
</span><span id="line-50"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span class="annot"><span class="annottext">(Reg, Reg)
</span><span class="hs-identifier">_</span></span><span>        </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">a -&gt; Maybe (Reg, Reg)
forall instr. Instruction instr =&gt; instr -&gt; Maybe (Reg, Reg)
</span><a href="GHC.CmmToAsm.Instr.html#takeRegRegMoveInstr"><span class="hs-identifier hs-var">takeRegRegMoveInstr</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681023275"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-51"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>    </span><span class="annot"><span class="annottext">(s -&gt; s) -&gt; State s ()
forall s. (s -&gt; s) -&gt; State s ()
</span><a href="GHC.Utils.Monad.State.html#modify"><span class="hs-identifier hs-var">modify</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">s -&gt; s -&gt; s
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">+</span></a></span><span> </span><span class="annot"><span class="annottext">s
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span>
</span><span id="line-52"></span><span>                        </span><span class="annot"><span class="annottext">a -&gt; State s a
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681023275"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-53"></span><span>
</span><span id="line-54"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-55"></span><span>                </span><span class="hs-glyph">=</span><span>       </span><span class="annot"><span class="annottext">a -&gt; State s a
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681023275"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-56"></span><span>
</span><span id="line-57"></span><span>
</span><span id="line-58"></span><span class="hs-comment">-- | Pretty print some RegAllocStats</span><span>
</span><span id="line-59"></span><span id="local-6989586621681023382"><span id="local-6989586621681023383"><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Stats.html#pprStats"><span class="hs-identifier hs-type">pprStats</span></a></span><span>
</span><span id="line-60"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#Instruction"><span class="hs-identifier hs-type">Instruction</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681023383"><span class="hs-identifier hs-type">instr</span></a></span><span>
</span><span id="line-61"></span><span>        </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#NatCmmDecl"><span class="hs-identifier hs-type">NatCmmDecl</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681023382"><span class="hs-identifier hs-type">statics</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681023383"><span class="hs-identifier hs-type">instr</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.CmmToAsm.Reg.Linear.Base.html#RegAllocStats"><span class="hs-identifier hs-type">RegAllocStats</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span></span></span><span>
</span><span id="line-62"></span><span>
</span><span id="line-63"></span><span id="pprStats"><span class="annot"><span class="annottext">pprStats :: forall instr statics.
Instruction instr =&gt;
[NatCmmDecl statics instr] -&gt; [RegAllocStats] -&gt; SDoc
</span><a href="GHC.CmmToAsm.Reg.Linear.Stats.html#pprStats"><span class="hs-identifier hs-var hs-var">pprStats</span></a></span></span><span> </span><span id="local-6989586621681023263"><span class="annot"><span class="annottext">[NatCmmDecl statics instr]
</span><a href="#local-6989586621681023263"><span class="hs-identifier hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681023262"><span class="annot"><span class="annottext">[RegAllocStats]
</span><a href="#local-6989586621681023262"><span class="hs-identifier hs-var">statss</span></a></span></span><span>
</span><span id="line-64"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">let</span><span>  </span><span class="hs-comment">-- sum up all the instrs inserted by the spiller</span><span>
</span><span id="line-65"></span><span>        </span><span class="hs-comment">-- See Note [UniqFM and the register allocator]</span><span>
</span><span id="line-66"></span><span>        </span><span class="annot"><a href="#local-6989586621681023261"><span class="hs-identifier hs-type">spills</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Unique.FM.html#UniqFM"><span class="hs-identifier hs-type">UniqFM</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Unique"><span class="hs-identifier hs-type">Unique</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">]</span><span>
</span><span id="line-67"></span><span>        </span><span id="local-6989586621681023261"><span class="annot"><span class="annottext">spills :: UniqFM Unique [Int]
</span><a href="#local-6989586621681023261"><span class="hs-identifier hs-var hs-var">spills</span></a></span></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(UniqFM Unique [Int] -&gt; UniqFM Unique [Int] -&gt; UniqFM Unique [Int])
-&gt; UniqFM Unique [Int]
-&gt; [UniqFM Unique [Int]]
-&gt; UniqFM Unique [Int]
forall (t :: * -&gt; *) b a.
Foldable t =&gt;
(b -&gt; a -&gt; b) -&gt; b -&gt; t a -&gt; b
</span><a href="../../base/src/Data.Foldable.html#foldl%27"><span class="hs-identifier hs-var">foldl'</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">([Int] -&gt; [Int] -&gt; [Int])
-&gt; UniqFM Unique [Int]
-&gt; UniqFM Unique [Int]
-&gt; UniqFM Unique [Int]
forall elt key.
(elt -&gt; elt -&gt; elt)
-&gt; UniqFM key elt -&gt; UniqFM key elt -&gt; UniqFM key elt
</span><a href="GHC.Types.Unique.FM.html#plusUFM_C"><span class="hs-identifier hs-var">plusUFM_C</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Int -&gt; Int -&gt; Int) -&gt; [Int] -&gt; [Int] -&gt; [Int]
forall a b c. (a -&gt; b -&gt; c) -&gt; [a] -&gt; [b] -&gt; [c]
</span><a href="../../base/src/GHC.List.html#zipWith"><span class="hs-identifier hs-var">zipWith</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">(+)</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-68"></span><span>                                </span><span class="annot"><span class="annottext">UniqFM Unique [Int]
forall key elt. UniqFM key elt
</span><a href="GHC.Types.Unique.FM.html#emptyUFM"><span class="hs-identifier hs-var">emptyUFM</span></a></span><span>
</span><span id="line-69"></span><span>                        </span><span class="annot"><span class="annottext">([UniqFM Unique [Int]] -&gt; UniqFM Unique [Int])
-&gt; [UniqFM Unique [Int]] -&gt; UniqFM Unique [Int]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">(RegAllocStats -&gt; UniqFM Unique [Int])
-&gt; [RegAllocStats] -&gt; [UniqFM Unique [Int]]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">RegAllocStats -&gt; UniqFM Unique [Int]
</span><a href="GHC.CmmToAsm.Reg.Linear.Base.html#ra_spillInstrs"><span class="hs-identifier hs-var hs-var">ra_spillInstrs</span></a></span><span> </span><span class="annot"><span class="annottext">[RegAllocStats]
</span><a href="#local-6989586621681023262"><span class="hs-identifier hs-var">statss</span></a></span><span>
</span><span id="line-70"></span><span>
</span><span id="line-71"></span><span>        </span><span id="local-6989586621681023250"><span class="annot"><span class="annottext">spillTotals :: [Int]
</span><a href="#local-6989586621681023250"><span class="hs-identifier hs-var hs-var">spillTotals</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">([Int] -&gt; [Int] -&gt; [Int]) -&gt; [Int] -&gt; [[Int]] -&gt; [Int]
forall (t :: * -&gt; *) b a.
Foldable t =&gt;
(b -&gt; a -&gt; b) -&gt; b -&gt; t a -&gt; b
</span><a href="../../base/src/Data.Foldable.html#foldl%27"><span class="hs-identifier hs-var">foldl'</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Int -&gt; Int -&gt; Int) -&gt; [Int] -&gt; [Int] -&gt; [Int]
forall a b c. (a -&gt; b -&gt; c) -&gt; [a] -&gt; [b] -&gt; [c]
</span><a href="../../base/src/GHC.List.html#zipWith"><span class="hs-identifier hs-var">zipWith</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">(+)</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-72"></span><span>                                </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">]</span><span>
</span><span id="line-73"></span><span>                        </span><span class="annot"><span class="annottext">([[Int]] -&gt; [Int]) -&gt; [[Int]] -&gt; [Int]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM Unique [Int] -&gt; [[Int]]
forall key elt. UniqFM key elt -&gt; [elt]
</span><a href="GHC.Types.Unique.FM.html#nonDetEltsUFM"><span class="hs-identifier hs-var">nonDetEltsUFM</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM Unique [Int]
</span><a href="#local-6989586621681023261"><span class="hs-identifier hs-var">spills</span></a></span><span>
</span><span id="line-74"></span><span>                        </span><span class="hs-comment">-- See Note [Unique Determinism and code generation]</span><span>
</span><span id="line-75"></span><span>
</span><span id="line-76"></span><span>        </span><span class="hs-comment">-- count how many reg-reg-moves remain in the code</span><span>
</span><span id="line-77"></span><span>        </span><span id="local-6989586621681023245"><span class="annot"><span class="annottext">moves :: Int
</span><a href="#local-6989586621681023245"><span class="hs-identifier hs-var hs-var">moves</span></a></span></span><span>           </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Int] -&gt; Int
forall (t :: * -&gt; *) a. (Foldable t, Num a) =&gt; t a -&gt; a
</span><a href="../../base/src/Data.Foldable.html#sum"><span class="hs-identifier hs-var">sum</span></a></span><span> </span><span class="annot"><span class="annottext">([Int] -&gt; Int) -&gt; [Int] -&gt; Int
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">(NatCmmDecl statics instr -&gt; Int)
-&gt; [NatCmmDecl statics instr] -&gt; [Int]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">NatCmmDecl statics instr -&gt; Int
forall instr statics.
Instruction instr =&gt;
NatCmmDecl statics instr -&gt; Int
</span><a href="GHC.CmmToAsm.Reg.Linear.Stats.html#countRegRegMovesNat"><span class="hs-identifier hs-var">countRegRegMovesNat</span></a></span><span> </span><span class="annot"><span class="annottext">[NatCmmDecl statics instr]
</span><a href="#local-6989586621681023263"><span class="hs-identifier hs-var">code</span></a></span><span>
</span><span id="line-78"></span><span>
</span><span id="line-79"></span><span>        </span><span id="local-6989586621681023239"><span class="annot"><span class="annottext">pprSpill :: (a, [a]) -&gt; SDoc
</span><a href="#local-6989586621681023239"><span class="hs-identifier hs-var hs-var">pprSpill</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681023238"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681023238"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681023237"><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681023237"><span class="hs-identifier hs-var">spills</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-80"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#parens"><span class="hs-identifier hs-var">parens</span></a></span><span> </span><span class="annot"><span class="annottext">(SDoc -&gt; SDoc) -&gt; SDoc -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#hcat"><span class="hs-identifier hs-var">hcat</span></a></span><span> </span><span class="annot"><span class="annottext">([SDoc] -&gt; SDoc) -&gt; [SDoc] -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; [SDoc] -&gt; [SDoc]
</span><a href="GHC.Utils.Outputable.html#punctuate"><span class="hs-identifier hs-var">punctuate</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;, &quot;</span></span><span class="hs-special">)</span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#doubleQuotes"><span class="hs-identifier hs-var">doubleQuotes</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">a -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681023238"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; [SDoc] -&gt; [SDoc]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">(a -&gt; SDoc) -&gt; [a] -&gt; [SDoc]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">a -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621681023237"><span class="hs-identifier hs-var">spills</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-81"></span><span>
</span><span id="line-82"></span><span>   </span><span class="hs-keyword">in</span><span>   </span><span class="hs-special">(</span><span>  </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;-- spills-added-total&quot;</span></span><span>
</span><span id="line-83"></span><span>        </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%24%24"><span class="hs-operator hs-var">$$</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;--    (allocs, clobbers, loads, joinRR, joinRM, reg_reg_moves_remaining)&quot;</span></span><span>
</span><span id="line-84"></span><span>        </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%24%24"><span class="hs-operator hs-var">$$</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#parens"><span class="hs-identifier hs-var">parens</span></a></span><span> </span><span class="annot"><span class="annottext">(SDoc -&gt; SDoc) -&gt; SDoc -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#hcat"><span class="hs-identifier hs-var">hcat</span></a></span><span> </span><span class="annot"><span class="annottext">([SDoc] -&gt; SDoc) -&gt; [SDoc] -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; [SDoc] -&gt; [SDoc]
</span><a href="GHC.Utils.Outputable.html#punctuate"><span class="hs-identifier hs-var">punctuate</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;, &quot;</span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Int -&gt; SDoc) -&gt; [Int] -&gt; [SDoc]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">[Int]
</span><a href="#local-6989586621681023250"><span class="hs-identifier hs-var">spillTotals</span></a></span><span> </span><span class="annot"><span class="annottext">[SDoc] -&gt; [SDoc] -&gt; [SDoc]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681023245"><span class="hs-identifier hs-var">moves</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-85"></span><span>        </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%24%24"><span class="hs-operator hs-var">$$</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;&quot;</span></span><span>
</span><span id="line-86"></span><span>        </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%24%24"><span class="hs-operator hs-var">$$</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;-- spills-added&quot;</span></span><span>
</span><span id="line-87"></span><span>        </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%24%24"><span class="hs-operator hs-var">$$</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;--    (reg_name, allocs, clobbers, loads, joinRR, joinRM)&quot;</span></span><span>
</span><span id="line-88"></span><span>        </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%24%24"><span class="hs-operator hs-var">$$</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">UniqFM Unique [Int] -&gt; ([(Unique, [Int])] -&gt; SDoc) -&gt; SDoc
forall key a. UniqFM key a -&gt; ([(Unique, a)] -&gt; SDoc) -&gt; SDoc
</span><a href="GHC.Types.Unique.FM.html#pprUFMWithKeys"><span class="hs-identifier hs-var">pprUFMWithKeys</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM Unique [Int]
</span><a href="#local-6989586621681023261"><span class="hs-identifier hs-var">spills</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#vcat"><span class="hs-identifier hs-var">vcat</span></a></span><span> </span><span class="annot"><span class="annottext">([SDoc] -&gt; SDoc)
-&gt; ([(Unique, [Int])] -&gt; [SDoc]) -&gt; [(Unique, [Int])] -&gt; SDoc
forall b c a. (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c
</span><a href="../../base/src/GHC.Base.html#."><span class="hs-operator hs-var">.</span></a></span><span> </span><span class="annot"><span class="annottext">((Unique, [Int]) -&gt; SDoc) -&gt; [(Unique, [Int])] -&gt; [SDoc]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">(Unique, [Int]) -&gt; SDoc
forall {a} {a}. (Outputable a, Outputable a) =&gt; (a, [a]) -&gt; SDoc
</span><a href="#local-6989586621681023239"><span class="hs-identifier hs-var">pprSpill</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-89"></span><span>        </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%24%24"><span class="hs-operator hs-var">$$</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;&quot;</span></span><span class="hs-special">)</span><span>
</span><span id="line-90"></span><span>
</span><span id="line-91"></span></pre></body></html>